package CutLoad.cookies
{
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.media.SoundTransform;
	import flash.net.URLRequest;
	/**
	 * 加载并操作mp3 
	 * @author smallerbird mail:smallerbird@gmail.com  site:www.mkigm.com QQ群:49983196
	 * 
	 */	
	public class CMP3
	{
		private var arrPlayList:Array,arrPlayList_i:Number=0
		private var mp3:Sound=null,soundChannel:SoundChannel=null;
		private var mp3V:SoundTransform;
		//两个事件方法
		private var playDo:Function=null,playEndDo:Function=null;
		/**
		 *获得标准转入的播放列表,如果歌曲在同一目录下的话，可以用这个方法简化一下。 
		 * @param path 同一目录的名称
		 * @param mp3Names 歌曲文件名数组(不需要.mp3后缀)  格式：["歌曲名1","歌曲名2"....]
		 * @return 
		 * 
		 */		
		public static function formatList(path:String,mp3Names:Array):String{
			var strReturn:String="";
			for(var i:Number=0;i<mp3Names.length;i++){
				if(i==0){
					strReturn=path+mp3Names[i]+".mp3"
				}else{
					strReturn+=","+path+mp3Names[i]+".mp3"
				}
			}
			return strReturn
		}
		/**
		 * 初始化
		 * @param list 歌曲播放列表,请用逗号隔开。
		 * 
		 */		
		public function CMP3(list:String=null)
		{
			if(list==null){
				arrPlayList=new Array();
			}else{
				arrPlayList=list.split(",");
			}
		}
		/**
		 * 设置每次播放时调用的方法: 格式：function(自已:CMP3) 
		 * @param fun
		 * 
		 */		
		public function setPlayDo(fun:Function):void{
			playDo=fun;
		}
		/**
		 * 设置第次播放结束调用的方法:格式：function(自已:CMP3) 
		 * @param fun
		 * 
		 */		
		public function setPlayEnd(fun:Function):void{
			playEndDo=fun;
		}
		/**
		 * 添加播放列表 
		 * @param url
		 * @return 
		 * 
		 */		
		public function add(url:String):void{
			arrPlayList.push(url);
		}
		/**
		 * 设置音量 
		 * @param v
		 * 
		 */		
		public function set volume(v:Number):void{
			soundChannel.soundTransform.volume=v;
		}
		/**
		 * 获得音量 
		 * @return 
		 * 
		 */		
		public function get volume():Number{
			return soundChannel.soundTransform.volume;
		}
		public function get isPre():Boolean{
			if(arrPlayList_i==0) return false;
			return true;
		}
		public function get isNext():Boolean{
			if(arrPlayList_i==arrPlayList.length-1) return false;
			return true;
		}
		/**
		 * 上一首
		 * 
		 */		
		public function pre():void{
			if(!isPre) return;
			arrPlayList_i--;
			playMp3(arrPlayList[arrPlayList_i])
		}
		/**
		 * 下一首 
		 * 
		 */		
		public function next():void{
			if(!isNext) return;
			arrPlayList_i++;
			playMp3(arrPlayList[arrPlayList_i])
		} 
		private var pasuse_position:Number=0
		/**
		 * 停止 
		 * @param t
		 * 
		 */		
		public function stop():void{
			if(soundChannel==null) return;
			pasuse_position=soundChannel.position;
			soundChannel.stop();
			soundChannel.removeEventListener(Event.SOUND_COMPLETE,sound_comp);
		}
		
		/**
		 * 重新开始播放
		 * 
		 */		
		public function play():void{
			if(soundChannel==null){
				playMp3(arrPlayList[arrPlayList_i])
				return;	
			}
			soundChannel=mp3.play(pasuse_position);
			soundChannel.addEventListener(Event.SOUND_COMPLETE,sound_comp);
		}
		/**
		 * 播放 
		 * @param url 如果为空就播放当前
		 * 
		 */		
		public function playMp3(url:String=""):void{
			if(mp3!=null){
				if(mp3.bytesLoaded!=mp3.bytesTotal) mp3.close();
				mp3.removeEventListener(ProgressEvent.PROGRESS,mp3_progress);
				if(soundChannel!=null) soundChannel.removeEventListener(Event.SOUND_COMPLETE,sound_comp);
				soundChannel.stop();
			}
			mp3=new Sound();
			mp3.addEventListener(ProgressEvent.PROGRESS,mp3_progress);
			if(url=="") url=this.arrPlayList[this.arrPlayList_i];
			mp3.load(new URLRequest(url));
			soundChannel=mp3.play();
			if(this.playDo!=null) this.playDo(this);
			soundChannel.addEventListener(Event.SOUND_COMPLETE,sound_comp);
		}
		private function sound_comp(e:Event):void{
			if(this.playEndDo!=null) playEndDo(this)
			if(!this.isNext){
				//如果是最后一个，就重新播放
				this.arrPlayList_i=0;
				this.playMp3();
			}else{
				next()
			}
			
		}
		/**
		 * 跳到哪里放
		 * @param vtem 音量
		 * @param isPercent 是设置毫秒，还是一支歌的百分比
		 * 
		 */		
		public function gotoAndPlay(vtem:Number,isPercent:Boolean=true):void{
			soundChannel.stop();
			if(isPercent) vtem=mp3.length*vtem
			soundChannel=mp3.play(vtem);
		}
		//进度
		private function mp3_progress(e:ProgressEvent):void{
			var numP:Number=e.bytesLoaded/e.bytesTotal;
		}
		/**
		 * 获得歌曲显示的时间指示
		 * @return ["分","秒"]
		 * 
		 */		
		public function getRunTime():Array{
			var sec:Number=Math.floor(soundChannel.position/1000);
			var min:Number=0;
			if(sec>60){
				min=Math.floor(sec/60);
				sec=sec-min*60;
			}
			var strSec:String=sec>9?String(sec):"0"+sec;
			var strMin:String=min>9?String(min):"0"+min;
			return [strMin,strSec];
		}
	}
}